#include "setcoordinatedialog.h"
#include "ui_setcoordinatedialog.h"
#include "hmicommondefine.h"
#include "instructionEnum.h"


SetCoordinateDialog::SetCoordinateDialog(int styleId,QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SetCoordinateDialog)
{
    ui->setupUi(this);
    move(0,0);
    initialDisplayStyle(styleId);
//#ifdef BUILD_ARM
//    setGeometry(70,128,460,595);
//#endif

    initViewTable();
}

void SetCoordinateDialog::initialDisplayStyle(int styleId)
{
    switch (styleId) {
    case 1:
        this->setGeometry(0,0,600,450);
        ui->xyzwpr_tableWidget->setGeometry(15,80,580,310);

        ui->reloadBtn->setGeometry(15,400,80,40);
        ui->editCoordinate_Btn->setGeometry(260,400,80,40);
        ui->returnBtn->setGeometry(510,400,80,40);
        break;
    default:
        break;
    }
}

void SetCoordinateDialog::initViewTable()
{
    ui->xyzwpr_tableWidget->setColumnCount(7);

    QStringList strHead;
    strHead<< tr("名称")<< tr("X") << tr("Y") << tr("Z") << tr("W") << tr("P") << tr("R");
    ui->xyzwpr_tableWidget->setHorizontalHeaderLabels(strHead);

    ui->xyzwpr_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择模式，选择单行
    ui->xyzwpr_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

    //根据空间 自动改变列宽 用户与程序不能改变列宽
//    ui->xyzwpr_tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    //根据空间 自动充满
    //ui->xyzwpr_tableWidget->horizontalHeader()->setStretchLastSection(true);
    //根据内容适应
    //ui->xyzwpr_tableWidget->resizeColumnToContents(0);
}

void SetCoordinateDialog::syncCoordinateValue()
{

    PointPro nonePoint;
    nonePoint.recordStatus = 0;

    if(coordinate2Dialog)
    {
        if(coordinate2Dialog->isHidden())
        {
            coordinate2Dialog->show();
        }

        viewFlag = 1;

        if(currentShowCoordinate == 0)
        {
            //用作直接数据缓存 类型缓存
            coordinate2Dialog->tmpInputTool.index = toolCoordinateInformation[currentCoordinateIndex].index;
            coordinate2Dialog->tmpInputTool.method = toolCoordinateInformation[currentCoordinateIndex].method;
            coordinate2Dialog->tmpInputTool.error = toolCoordinateInformation[currentCoordinateIndex].error;//只有tool有error
            coordinate2Dialog->tmpInputTool.name = toolCoordinateInformation[currentCoordinateIndex].name;

            if(coordinate2Dialog->tmpInputTool.xyzwpr.size() == toolCoordinateInformation[currentCoordinateIndex].xyzwpr.size())
            {
                for(int i = 0;i<coordinate2Dialog->tmpInputTool.xyzwpr.size();i++)
                {
                    coordinate2Dialog->tmpInputTool.xyzwpr[i] = toolCoordinateInformation[currentCoordinateIndex].xyzwpr[i];
                }
            }
            coordinate2Dialog->tmpInputTool.mass = toolCoordinateInformation[currentCoordinateIndex].mass;
            coordinate2Dialog->tmpInputTool.massCenter = toolCoordinateInformation[currentCoordinateIndex].massCenter;
            //tmpThreeTool tmpSixTool只用作点缓存:清除示教记录
            for(int i = 0;i<3;i++)
            {
                coordinate2Dialog->tmpThreeTool.pointList[i].recordStatus = 0;
//                editCoordinate->tmpThreeTool.pointList[i] = nonePoint;//coredump
            }
            for(int i = 0;i<6;i++)
            {
                coordinate2Dialog->tmpSixTool.pointList[i].recordStatus = 0;
                coordinate2Dialog->tmpSixTool.pointList[i] = nonePoint;
            }
            //tmpThreeTool tmpSixTool只用作点缓存
            if(3 == toolCoordinateInformation[currentCoordinateIndex].pointList.size())
            {
                for(int i= 0;i<3;i++)
                {
                    coordinate2Dialog->tmpThreeTool.pointList[i] = toolCoordinateInformation[currentCoordinateIndex].pointList[i];
                }
            }
            else if (6 == toolCoordinateInformation[currentCoordinateIndex].pointList.size())
            {
                for(int i= 0;i<6;i++)
                {
                    coordinate2Dialog->tmpSixTool.pointList[i] = toolCoordinateInformation[currentCoordinateIndex].pointList[i];
                }
            }
            else if (20 == toolCoordinateInformation[currentCoordinateIndex].pointList.size())
            {
                if(ENUM_TOOL_20POINTS==coordinate2Dialog->tmpInputTool.method)
                {
                    for(int i= 0;i<20;i++)
                    {
                        coordinate2Dialog->tmpTwentyPointToolInfo.pointList[i] = toolCoordinateInformation[currentCoordinateIndex].pointList[i];
                    }
                }
                else
                {
                    for(int i= 0;i<20;i++)
                    {
                        coordinate2Dialog->tmpTwentyPointZeroToolInfo.pointList[i] = toolCoordinateInformation[currentCoordinateIndex].pointList[i];
                    }
                }

            }
            else if (23 == toolCoordinateInformation[currentCoordinateIndex].pointList.size())
            {
                for(int i= 0;i<23;i++)
                {
                    coordinate2Dialog->tmpTwentyThreePointToolInfo.pointList[i] = toolCoordinateInformation[currentCoordinateIndex].pointList[i];
                }
            }

            //坐标系类型 数组下标
            coordinate2Dialog->updateView(currentShowCoordinate,currentCoordinateIndex);//更新数据
        }
        else if (currentShowCoordinate == 1)
        {
            //用作直接数据缓存 类型缓存
            coordinate2Dialog->tmpInputUser.index = userCoordinateInformation[currentCoordinateIndex].index;
            coordinate2Dialog->tmpInputUser.method = userCoordinateInformation[currentCoordinateIndex].method;
            coordinate2Dialog->tmpInputUser.name = userCoordinateInformation[currentCoordinateIndex].name;

            if(coordinate2Dialog->tmpInputUser.xyzwpr.size() == userCoordinateInformation[currentCoordinateIndex].xyzwpr.size())
            {
                for(int i = 0;i<coordinate2Dialog->tmpInputUser.xyzwpr.size();i++)
                {
                    coordinate2Dialog->tmpInputUser.xyzwpr[i] = userCoordinateInformation[currentCoordinateIndex].xyzwpr[i];
                }
            }

            //tmpThreeuser tmpFourUser只用作点缓存
            for(int i = 0;i<3;i++)
            {
                coordinate2Dialog->tmpThreeUser.pointList[i].recordStatus = 0;
//                editCoordinate->tmpThreeUser.pointList[i] = nonePoint;//清除示教记录?
            }
            for(int i = 0;i<4;i++)
            {
                 coordinate2Dialog->tmpFourUser.pointList[i].recordStatus = 0;
//                editCoordinate->tmpFourUser.pointList[i] = nonePoint;//清除示教记录?
            }
            if(3 == userCoordinateInformation[currentCoordinateIndex].pointList.size())
            {
                for(int i= 0;i<3;i++)
                {
                    coordinate2Dialog->tmpThreeUser.pointList[i] = userCoordinateInformation[currentCoordinateIndex].pointList[i];
                }
            }
            if (4 == userCoordinateInformation[currentCoordinateIndex].pointList.size())
            {
                for(int i= 0;i<4;i++)
                {
                    coordinate2Dialog->tmpFourUser.pointList[i] = userCoordinateInformation[currentCoordinateIndex].pointList[i];
                }
            }

            coordinate2Dialog->updateView(currentShowCoordinate,currentCoordinateIndex);//更新数据
        }
        else
        {}
    }

}

SetCoordinateDialog::~SetCoordinateDialog()
{
    delete ui;
}

void SetCoordinateDialog::changeLanguage()
{
    ui->retranslateUi(this);
    coordinate2Dialog->changeLanguage();
}

void SetCoordinateDialog::on_returnBtn_clicked()
{
    this->hide();
}

/**
 * @brief SetCoordinateView::updateView　更新设置数据到控件上
 */
void SetCoordinateDialog::updateView()
{
    //工具坐标系
    if(0 == currentShowCoordinate)
    {
        ui->userCoordinate_Btn->setStyleSheet("border-width:0px;border-style:outset;image: url(/agvwork/AgvHmi/baseBag/hmiProject/resources/setCoordinateRes/setCoor_n.png);color: rgb(255, 255, 255);");
        ui->toolCoordinate_Btn->setStyleSheet("border-width:0px;border-style:outset;image: url(/agvwork/AgvHmi/baseBag/hmiProject/resources/setCoordinateRes/setCoor_p.png);color: rgb(255, 255, 255);");

        ui->xyzwpr_tableWidget->setRowCount(toolCoordinateInformation.size());
        ui->xyzwpr_tableWidget->selectRow(currentCoordinateIndex);
        QStringList strHead;
        for(int i = 0;i< toolCoordinateInformation.size();i++)
        {
            strHead << QString::number(i);
        }
        ui->xyzwpr_tableWidget->setVerticalHeaderLabels(strHead);

        for(int i = 0; i < toolCoordinateInformation.size(); i++)
        {
            //QString index = QString("%1").arg(toolCoordinateInformation[i].index);
            //ui->xyzwpr_tableWidget->setItem(i,0,new QTableWidgetItem(index));

//            ui->xyzwpr_tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i)));
            for(int j = 0; j < ui->xyzwpr_tableWidget->columnCount(); j ++)
            {
                QString data;
                if(toolCoordinateInformation[i].xyzwpr.size()>j)
                {
                    data= QString::number(toolCoordinateInformation[i].xyzwpr[j],'f',2);
                }

                ui->xyzwpr_tableWidget->setItem(i, j+1, new QTableWidgetItem(data));
            }
            ui->xyzwpr_tableWidget->setItem(i, 0, new QTableWidgetItem(
                                                QString::fromStdString(toolCoordinateInformation[i].name)));
        }
    }
    //用户坐标系
    else if(1 == currentShowCoordinate)
    {
        ui->userCoordinate_Btn->setStyleSheet("border-width:0px;border-style:outset;image: url(/agvwork/AgvHmi/baseBag/hmiProject/resources/setCoordinateRes/setCoor_p.png);color: rgb(255, 255, 255);");
        ui->toolCoordinate_Btn->setStyleSheet("border-width:0px;border-style:outset;image: url(/agvwork/AgvHmi/baseBag/hmiProject/resources/setCoordinateRes/setCoor_n.png);color: rgb(255, 255, 255);");

        ui->xyzwpr_tableWidget->setRowCount(userCoordinateInformation.size());
        ui->xyzwpr_tableWidget->selectRow(currentCoordinateIndex);
        QStringList strHead;
        for(int i = 0;i< toolCoordinateInformation.size();i++)
        {
            strHead << QString::number(i);
        }
        ui->xyzwpr_tableWidget->setVerticalHeaderLabels(strHead);

        for(int i = 0; i < userCoordinateInformation.size(); i++)
        {
            //QString index = QString("%1").arg(userCoordinateInformation[i].index);
            //ui->xyzwpr_tableWidget->setItem(i,0,new QTableWidgetItem(index));

//            ui->xyzwpr_tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i)));
            for(int j = 0; j < ui->xyzwpr_tableWidget->columnCount(); j ++)
            {
                QString data;
                if(userCoordinateInformation[i].xyzwpr.size()>j)
                {
                    data= QString::number(userCoordinateInformation[i].xyzwpr[j],'f',2);
                }

                ui->xyzwpr_tableWidget->setItem(i, j+1, new QTableWidgetItem(data));
            }
            ui->xyzwpr_tableWidget->setItem(i, 0, new QTableWidgetItem(
                                                QString::fromStdString(userCoordinateInformation[i].name)));
        }
    }

    //根据空间 自动改变列宽 用户与程序不能改变列宽
    //ui->xyzwpr_tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    //根据空间 自动充满
    ui->xyzwpr_tableWidget->horizontalHeader()->setStretchLastSection(true);
    //根据内容适应
    ui->xyzwpr_tableWidget->resizeColumnToContents(0);
}

void SetCoordinateDialog::on_editCoordinate_Btn_clicked()
{
    //点击编辑后
    //选中的数据赋值给editView的缓存里
    //所以直接对缓存操作便可
    //this->close();
    if(ui->xyzwpr_tableWidget->currentRow() <0 )
    {
        emit msgBoxSignal(EM_MSG_BOX_SURE_BTN,tr("提示"),tr("没有选中行"));
        return;
    }
    //2017.04.18 补充 0行禁止操作
    else
    {
        if(0 == ui->xyzwpr_tableWidget->currentRow())
        {
            emit msgBoxSignal(EM_MSG_BOX_SURE_BTN,tr("提示"),tr("0号行 不可编辑"));
            return;
        }
    }

    currentCoordinateIndex = ui->xyzwpr_tableWidget->currentRow();
    qDebug() << "edit " << currentCoordinateIndex + 1;

    syncCoordinateValue();
}

void SetCoordinateDialog::on_toolCoordinate_Btn_clicked()
{
    emit selectToolCoordinate();
}

void SetCoordinateDialog::on_userCoordinate_Btn_clicked()
{
    emit selectUserCoordinate();
}

void SetCoordinateDialog::on_reloadBtn_clicked()
{
    emit reloadCoordinate();
}
